/**
 * 
 */
package br.org.bertol.mestrado.engine.optimisation;

import java.util.Comparator;
import java.util.EnumMap;
import java.util.List;

import br.org.bertol.mestrado.engine.Objective;
import br.org.bertol.mestrado.engine.optimisation.entity.AbstractUnit;

/**
 * @author contaqualquer
 * @param <U>
 */
public abstract class AbstractRepository<U extends AbstractUnit<?>> {

    /***/
    protected final transient Comparator<EnumMap<Objective, Number>> paretoDominace;

    /**
     * @param pareto
     *            Comparador pareto
     */
    public AbstractRepository(
        final Comparator<EnumMap<Objective, Number>> pareto) {

        paretoDominace = pareto;
    }

    /**
     * Adiciona unidade no repositório.
     * @param unitList
     *            Lista de unidade
     * @throws Exception
     *             Caso ocorra algum erro durante a inserção
     */
    public abstract void addInto(final List<U> unitList) throws Exception;

    /**
     * Retorna a lista de objetos da fronteira de pareto.
     * @return {@link List} Lista com os itens da fronteira de pareto
     */
    public abstract List<U> getParetoBorder();

}
